import { ref, computed, reactive } from "vue";
import { createThumbnail } from "@/utils/image.js";
import { defineStore } from "pinia";
import useDirStore from "./dir.js";
import http from "@/utils/axios.js";

// 用户文件数据
const useFilesStore = defineStore(
	"files",
	() => {
		const files = ref([]); //文件列表 [item:{dirId,page,fileList}]
		//替换目录当前页码所有文件
		function replaceFiles({ dirId, page, list }, refresh = false) {
			if (refresh) {
				files.value.forEach((item) => {
					if (item.dirId === dirId && Array.isArray(item.list)) {
						item.list.length = 0;
					}
				});
			}
			const i = files.value.findIndex((item) => {
				return item.dirId === dirId && item.page === page;
			});
			if (files.value[i]) {
				return (files.value[i].list = list);
			}
			files.value.push({ dirId, page, list });
		}

		//添加单个文件到目录中 一般用于添加单个文件 一旦使用，将会清空除当前目录的其它页码数据
		function addFile(file, dirId, page = 1) {
			dirId = dirId * 1;
			page = page * 1;
			files.value.forEach((item) => {
				if (item.dirId === dirId && item.page !== page) {
					item.list.length = 0;
				}
			});
			const i = files.value.findIndex((item) => {
				return item.dirId === dirId && item.page === page;
			});

			if (i > -1 && files.value[i].list) {
				return files.value[i].list.unshift(file);
			}
			files.value.unshift({ dirId, page, list: [file] });
		}
		// 根据目录ID和page取得文件
		function getDirFiles(dirId, page = 1) {}
		//清空目录
		function clear() {
			files.value.length = 0;
		}
		//取得目录页码下文件列表
		function getDirFiles(
			pid,
			{ page = 1, is_count = undefined, limit = 24 },
			refresh = false
		) {
			const fileList = files.value.find((item) => {
				return item.dirId === pid && item.page === page;
			});
			if (!refresh && fileList && fileList.list?.length > 0) {
				return Promise.resolve();
			}
			return http
				.get("app/pan/dir/select", { params: { pid, page, is_count, limit } })
				.then((res) => {
					const dirStore = useDirStore();
					const list = res.list?.map((item) => {
						item.url = createThumbnail(item);
						return item;
					});
					replaceFiles({ dirId: pid, page, list });
					dirStore.changeDirTotal(pid, res.count);
				});
		}

		return {
			files, //文件列表
			replaceFiles, //替换目录当前页码所有文件
			addFile, //添加单个文件到目录中
			clear, //清空文件
			getDirFiles, //取得目录文件
		};
	},
	{
		persist: {
			key: "webman-pan-files",
		},
	}
);
export default useFilesStore;
